package com.zsj.springbootmq;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


/**
 * 1、rabbitMq引入场景启动器
 * <dependency>
 * <groupId>org.springframework.boot</groupId>
 * <artifactId>spring-boot-starter-amqp</artifactId>
 * </dependency>
 * RabbitAutoConfiguration 中将会自动注入RabbitTemplate这个bean
 * <p>
 * 2、开始使用rabbitmq
 * 启动类上加上@EnableRabbit
 * 3、配置配置文件  所有可配置项在RabbitProperties中可以看到
 * 4、监听消息 使用@RabbitListener 前提:你必须在启动类上加上@EnableRabbit注解
 *
 * @RabbitListener 类+方法上
 * @RabbitHandler 方法上
 *
 *
 * 5、开启发布确认  此操作会降低250倍的性能 但是能保证消息的安全送达
 *      第一需要在配置文件中 2.2以前是publisher-confirms: true
 *                       之后是publisher-confirm-type: correlated
 *      第二需要自定义化我们的配置文件:
 *              在配置类中  声明一个@bean  并且是PostConstruct的
 *              给rabbitMqTemplate 设置一个confirm
 *               rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
 *             log.info("confirm----correlationData:{},ack?:{},cause:{}", correlationData, ack, cause);
 *         });
 *
 */
@SpringBootApplication
@EnableRabbit
public class SpringBootMqApplication {


    public static void main(String[] args) {
        SpringApplication.run(SpringBootMqApplication.class, args);
    }

}
